// UdpServer.cc文件
#include "UdpServer.hpp"
#include "Dictionary.hpp"
#include <memory>

// 格式为：udpserver port
int main(int argc, char *argv[])
{
    if (argc != 2)
    {
        std::cout << "Usage:" << argv[0] << " port" << std::endl;
        return 1;
    }
    uint16_t port = std::stoi(argv[1]);

    // 字典对象提供翻译功能
    Dictionary dict; // 实例化dictionary的对象
    dict.Load();     // 加载

    // 网络服务器对象提供通信功能
    Refresh_Log_To_Console();
    // lambda表达式的参数变为两个
    std::unique_ptr<UdpServer> server = std::make_unique<UdpServer>(port, 
        [&dict](const std::string &w, InetAddr &addr) -> std::string { return dict.Translate(w, addr); });
    server->Init();
    server->Start();
    return 0;
}

// std::string DefaultHandler(const std::string &messages)
// {
//     std::string s = "***";
//     s = s + messages + "***";
//     return s;
// }

// // 格式为：udpserver port
// int main(int argc, char *argv[])
// {
//     if (argc != 2)
//     {
//         std::cout << "Usage:" << argv[0] << " port" << std::endl;
//         return 1;
//     }
//     uint16_t port = std::stoi(argv[1]);
//     Refresh_Log_To_Console();
//     // 初始化时传回调方法
//     std::unique_ptr<UdpServer> server = std::make_unique<UdpServer>(port, DefaultHandler);
//     server->Init();
//     server->Start();
//     return 0;
// }

// // 格式为：udpserver port
// int main(int argc, char *argv[])
// {
//     if (argc != 2)
//     {
//         std::cout << "Usage:" << argv[0] << " port" << std::endl;
//         return 1;
//     }
//     uint16_t port = std::stoi(argv[1]);
//     Refresh_Log_To_Console();
//     std::unique_ptr<UdpServer> server = std::make_unique<UdpServer>(port);
//     server->Init();
//     server->Start();
//     return 0;
// }

// // 格式为：udpserver ip port
// int main(int argc, char *argv[])
// {
//     if (argc != 3)
//     {
//         std::cout << "Usage:" << argv[0] << " ip port" << std::endl;
//         return 1;
//     }
//     std::string ip = argv[1];
//     uint16_t port = std::stoi(argv[2]);
//     Refresh_Log_To_Console();
//     std::unique_ptr<UdpServer> server = std::make_unique<UdpServer>(ip, port);
//     server->Init();
//     server->Start();
//     return 0;
// }